package com.baixun.gassystem.service.impl;

import com.baixun.gasentity.dto.LawEnforcementVideoDTO;
import com.baixun.gasentity.dto.VideoSummaryDTO;
import com.baixun.gasentity.entity.SysLawEnforcementVideo;
import com.baixun.gassystem.mapper.SysLawEnforcementVideoMapper;
import com.baixun.gassystem.service.SysLawEnforcementVideoService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class SysLawEnforcementVideoServiceImpl implements SysLawEnforcementVideoService {

    @Autowired
    private SysLawEnforcementVideoMapper sysLawEnforcementVideoMapper;


    /**
     * 选择每日视频摘要
     * 本方法用于查询并返回每日的视频摘要信息，支持分页显示
     *
     * @param page 页码，如果为null，则默认为第1页
     * @param size 每页大小，如果为null，则默认每页显示4条记录
     * @return 返回一个分页对象，包含视频摘要信息的列表
     */
    @Override
    public IPage<VideoSummaryDTO> selectDailyVideoSummary(Integer page, Integer size) {
        // 如果页码未指定，默认设置为1
        if (page == null) {
            page = 1;
        }
        // 如果每页大小未指定，默认设置为4
        if (size == null) {
            size = 4;
        }

        // 创建分页对象并传递分页参数，查询分页数据
        Page<VideoSummaryDTO> pagination = new Page<>(page, size);

        // 查询数据库中的分页数据，直接返回 DTO 数据，不需要转换
        IPage<VideoSummaryDTO> videoPage = sysLawEnforcementVideoMapper.selectDailyVideoSummary(pagination);

        return videoPage;  // 直接返回查询的分页数据
    }
    /**
     * 根据日期选择执法视频记录
     * 如果未提供日期，则默认使用当前日期
     * 此方法侧重于筛选特定日期的视频记录，以便进一步处理或展示
     *
     * @param date 视频记录的日期，格式为yyyy-MM-dd如果未提供，则使用当前日期
     * @return 返回一个LawEnforcementVideoDTO列表，包含指定日期的视频记录
     */
    @Override
    public List<LawEnforcementVideoDTO> selectVideoRecordsByDate(String date) {
        // 如果没有提供日期，默认使用当天日期
        if (date == null || date.isEmpty()) {
            date = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        }
        List<SysLawEnforcementVideo> videoRecords = sysLawEnforcementVideoMapper.selectVideoRecordsByDate(date);

        // 将实体类转换为 DTO，只返回需要的字段
        return videoRecords.stream().map(video -> {
            LawEnforcementVideoDTO dto = new LawEnforcementVideoDTO();
            dto.setDeviceName(video.getDeviceName());
            dto.setStartTime(video.getStartTime());
            dto.setEndTime(video.getEndTime());
            dto.setSizeGb(video.getSizeGb()); // 使用 sizeGb 而不是 fileSize
            return dto;
        }).collect(Collectors.toList());
    }
}
